package modelo.servicio;

import java.util.List;
import modelo.bd.dao.CausaDAO;
import modelo.bd.excepcion.DAOException;
import modelo.dominio.Causa;

public class Causas {

    private static Causas instancia;
    private CausaDAO dao;

    private Causas() {
        this.dao = new CausaDAO();
    }

    public static Causas instancia() {
        if (instancia == null) {
            instancia = new Causas();
        }
        return instancia;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return new CloneNotSupportedException("No se puede clonar Causas.");
    }
    
    public void agregar(String clave, String tipo, String descripcion, 
            String descripcionCorta, String usuario) throws DAOException {
        Causa causa = new Causa(clave.replace("'", "''"), tipo, descripcion.replace("'", "''"), descripcionCorta);
        if (descripcionCorta != null) {
            causa.setDescripcionCorta(descripcionCorta.replace("'", "''"));
        }
        dao.add(causa, usuario);
    }

    public void editar(String clave, String tipo, String descripcion, 
            String descripcionCorta, String usuario) throws DAOException {
        Causa causa = new Causa(clave.replace("'", "''"), tipo, descripcion.replace("'", "''"), descripcionCorta);
        if (descripcionCorta != null) {
            causa.setDescripcionCorta(descripcionCorta.replace("'", "''"));
        }
        dao.update(causa, usuario);
    }

    public void eliminar(String clave) throws DAOException {
        dao.deleteWhere("cafl_clave = '" + clave.replace("'", "''") + "'");
    }

    public List<Causa> todos() throws DAOException {
        return dao.selectAll();
    }
    
    public Causa porClave(String clave) throws DAOException {
        try {
            List<Causa> ls = dao.selectWhere("cafl_clave  = '" + clave.replace("'", "''") + "'");
            return ls.get(0);
        } catch (Exception e) {
            return null;
        }
    }
    
    public List<Causa> porTipo(String tipo) throws DAOException {
        return dao.selectWhere("cafl_tipo_causa = '" + tipo + "'");
    }
}
